package elementary_alg.array;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

/**
 * @author : Kong Decheng
 * @date : 2021/04/02
 * @description: 存在重复元素
 */
public class LC4 {
    /**
     * 暴力求解
     */
    public boolean solution_1(int[] nums) {
        for (int i = 0; i < nums.length; i++) {
            for (int j = i + 1; j < nums.length; j++) {
                if (nums[i] == nums[j]) {
                    return true;
                }
            }
        }
        return false;
    }

    /**
     * 先排序再检查相邻元素是否相同
     *
     * @param nums 待检查数组
     * @return true: 存在重复元素 false: 不存在重复元素
     */
    public boolean solution_2(int[] nums) {
        // 使用工具类对数组进行排序
        Arrays.sort(nums);
        // 检查相邻元素是否相等
        for (int i = 1; i < nums.length; i++) {
            if (nums[i] == nums[i - 1]) {
                return true;
            }
        }
        return false;
    }

    /**
     * 使用 set 集合
     *
     * @param nums
     * @return
     */
    public boolean solution_3(int[] nums) {
        Set<Integer> set = new HashSet<>();
        for (int num : nums) {
            // set 中不能有重复的元素，添加重复的元素会添加失败, 返回 false
            // 判断元素是否添加成功，添加失败说明数组存在重复元素，返回 true
            if (!set.add(num)) {
                return true;
            }
        }
        return false;
    }
}
